it's just dog[i]
The problem is probably is that you're using %s with sprintf. When you give it &dog[i] it's getting a pointer to whatever index of the array its on and it will follow the pointer until it gets to the null terminator, as per the definition of a C string, so it'll print out everything from the ith character on.
If you use %c it works as expected (I also changed gets to fgets to guard against the buffer overflow):
#define MAX_DOG_LEN 10
int main(int argc, char* argv[])
{
char dog[MAX_DOG_LEN];
int length, i;
fgets(dog, MAX_DOG_LEN, stdin);
length = strlen(dog);
for (i = 0; i < length; ++i)
if (dog[i] != '\n')
printf("%c\n", dog[i]);
return 0;
}